package excel.csv_excel;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;

import java.io.*;

/**
 * excel读取和写入，xls文件格式
 */
public class ExcelTest {
    /**
     * 读取的方法
     */
    public static void readExcel(InputStream inputStream) throws IOException {
        //初始整个excel 传入输入流
        HSSFWorkbook hssfWorkbook=new HSSFWorkbook(inputStream);
        //获取第一个表
        HSSFSheet hssfSheet=hssfWorkbook.getSheetAt(0);//或者 HSSFSheet sheet =workbook.getSheet("Sheet1");
         //获取第一行
        HSSFRow hssfRow=hssfSheet.getRow(0);
        //获取第一行的第一个单元格
        HSSFCell hssfCell=hssfRow.getCell(0);
        String cell0=hssfCell.getStringCellValue().toString();
        System.out.println("第一个单元格："+cell0);
        //读取第二行第一个
        HSSFRow hssfRow1=hssfSheet.getRow(1);
        //第二行的第一个单元格
        HSSFCell hssfCell1=hssfRow1.getCell(0);
        //密码，存数字的单元格不能直接.getStringCellValue();要先转化一下类型，不然会报错
       hssfCell1.setCellType(Cell.CELL_TYPE_STRING);
        String cell1=hssfCell1.getStringCellValue();
        int id=Integer.parseInt(cell1);
        System.out.println("第二行第一个是"+cell1);
    }
    //输出全部的方法
    public static void readall(InputStream inputStream) throws IOException {
        HSSFWorkbook hssfWorkbook=new HSSFWorkbook(inputStream);

        System.out.println("hssfWorkbook:"+hssfWorkbook.getNumberOfSheets());
        for(int sheetindex=0;sheetindex<hssfWorkbook.getNumberOfSheets();sheetindex++){//获取第几个
            HSSFSheet hssfSheet=hssfWorkbook.getSheetAt(sheetindex);//得到第一个表格
        for(int i=0;i<=hssfSheet.getLastRowNum();i++){
            System.out.println("i:"+i);
            HSSFRow hssfRow=hssfSheet.getRow(i);//获取每一行
            System.out.println("最后一行"+hssfSheet.getLastRowNum());
            if (hssfRow == null) {
                continue;
            }
//            HSSFCell hssfCell=hssfRow.getCell(0);//第一个单元格
//            hssfCell.setCellType(Cell.CELL_TYPE_STRING);//设置类型，因为每行第一个有的是数字
//            String cell0=hssfCell.getStringCellValue();
//            System.out.println("循环输出第一个单元格："+cell0);
//            HSSFCell hssfCell1=hssfRow.getCell(1);//第二个单元格
//            hssfCell1.setCellType(Cell.CELL_TYPE_STRING);//设置类型，因为每行第一个有的是数字
//            String cell1=hssfCell1.getStringCellValue();
//            System.out.println("循环输出第二个单元格："+cell1);
//            HSSFCell hssfCell2=hssfRow.getCell(2);//第三个单元格
//            hssfCell2.setCellType(Cell.CELL_TYPE_STRING);//设置类型，因为每行第一个有的是数字
//            String cell2=hssfCell2.getStringCellValue();
//            System.out.println("循环输出第三个单元格："+cell2);
            for(int cellnum=0;cellnum<hssfRow.getLastCellNum();cellnum++ ){//用循环输出每行的单元格
                System.out.println("cellallnum:"+hssfRow.getLastCellNum());
                HSSFCell hssfCell=hssfRow.getCell(cellnum);//得到一行的每个单元格
                hssfCell.setCellType(Cell.CELL_TYPE_STRING);
                System.out.println("第"+(i+1)+"行的数据"+hssfCell.getRichStringCellValue().getString());
            }


        }
        }
    }
    public  static void writecell(OutputStream outputStream) throws IOException {//传入输入流
       HSSFWorkbook hssfWorkbook=new HSSFWorkbook();
       HSSFSheet hssfSheet=hssfWorkbook.createSheet();//创建excel
        HSSFRow hssfRow=hssfSheet.createRow(0);//创建第一行
      HSSFCell hssfCell=  hssfRow.createCell(0);//创建第一个excel单元格
        hssfCell.setCellValue(new HSSFRichTextString("第二个单元格"));
        hssfWorkbook.write(outputStream);//将输出流写入到excel表格
        System.out.println("写入成功");
    }
    public  static  void writeall(OutputStream outputStream){//从数据库写入

    }
    public static void main(String[] args) throws IOException {
        InputStream inputStream=new FileInputStream(new File("E:\\宏图学习之旅\\poi\\poi实践\\Writers.xls"));//读取excel文件
    //调用读取excel的方法
        //readExcel(inputStream);
        readall(inputStream);
        OutputStream outputStream=new FileOutputStream(new File("E:\\宏图学习之旅\\poi\\poi实践\\first.xls"));
        writecell(outputStream);
    }
}
